#include "HashPrinter.h"


HashPrinter::HashPrinter(HashFile& h) : _hash(h)
{
}


void HashPrinter::ImprimirDatos(std::string nomArch) const{

	// El flujo de salida
	std::ofstream fout;
	std::ostream& out = abrirOutStream(nomArch, fout);

	int cantBloques = this->_hash._headerDispersion.getCantBloques();
	for (int i = 1; i < cantBloques; ++i){
		BloqueHash b;
		this->_hash._arch.leer(b, i);

		out << "Bloque Nro " << i << "\n"
				<< b << "\n";
	}

	cerrarOutStream(fout);
}


// Abre un stream de salida, consola o archivo según si se definió el nombre del archivo o no
std::ostream& HashPrinter::abrirOutStream(std::string nomArch, std::ofstream& fout) const {

	// Si no hay un nombre de archivo, la salida es por consola
	if (nomArch == "") return std::cout;

	// La salida es por archivo
	fout.open( nomArch.c_str() );
	return fout;
}


// Se cierra el archivo, solo si es necesario
void HashPrinter::cerrarOutStream(std::ofstream& fout) const {
	if (fout.is_open()){
		fout.close();
	}
}
